# kinds                                                               -*- sh -*-
#
# For documentation on this file format, please refer to
# src/theory/builtin/kinds.
#

theory THEORY_UF ::cvc5::internal::theory::uf::TheoryUF "theory/uf/theory_uf.h"
typechecker "theory/uf/theory_uf_type_rules.h"

properties stable-infinite parametric
properties check ppStaticLearn presolve

rewriter ::cvc5::internal::theory::uf::TheoryUfRewriter "theory/uf/theory_uf_rewriter.h"
parameterized APPLY_UF VARIABLE 1: "application of an uninterpreted function; first parameter is the function, remaining ones are parameters to that function"

typerule APPLY_UF ::cvc5::internal::theory::uf::UfTypeRule

operator FUNCTION_TYPE 2: "a function type"
cardinality FUNCTION_TYPE \
    "::cvc5::internal::theory::uf::FunctionProperties::computeCardinality(%TYPE%)" \
    "theory/uf/theory_uf_type_rules.h"
well-founded FUNCTION_TYPE \
    "::cvc5::internal::theory::uf::FunctionProperties::isWellFounded(%TYPE%)" \
    "::cvc5::internal::theory::uf::FunctionProperties::mkGroundTerm(%TYPE%)" \
    "theory/uf/theory_uf_type_rules.h"
enumerator FUNCTION_TYPE \
    ::cvc5::internal::theory::uf::FunctionEnumerator \
    "theory/uf/type_enumerator.h"

operator LAMBDA 2 "a lambda expression; first parameter is a BOUND_VAR_LIST, second is lambda body"

typerule LAMBDA ::cvc5::internal::theory::uf::LambdaTypeRule

variable BOOLEAN_TERM_VARIABLE "Boolean term variable"

operator HO_APPLY 2 "higher-order (partial) function application"
typerule HO_APPLY ::cvc5::internal::theory::uf::HoApplyTypeRule

constant CARDINALITY_CONSTRAINT_OP \
  class \
  CardinalityConstraint \
  ::cvc5::internal::CardinalityConstraintHashFunction \
  "expr/cardinality_constraint.h" \
  "the cardinality constraint operator; payload is an instance of the cvc5::internal::CardinalityConstraint class"
parameterized CARDINALITY_CONSTRAINT CARDINALITY_CONSTRAINT_OP 0 "a fixed upper bound on the cardinality of an uninterpreted sort"

typerule CARDINALITY_CONSTRAINT_OP ::cvc5::internal::theory::uf::CardinalityConstraintOpTypeRule
typerule CARDINALITY_CONSTRAINT ::cvc5::internal::theory::uf::CardinalityConstraintTypeRule

constant COMBINED_CARDINALITY_CONSTRAINT_OP \
  class \
  CombinedCardinalityConstraint \
  ::cvc5::internal::CombinedCardinalityConstraintHashFunction \
  "expr/cardinality_constraint.h" \
  "the combined cardinality constraint operator; payload is an instance of the cvc5::internal::CombinedCardinalityConstraint class"
parameterized COMBINED_CARDINALITY_CONSTRAINT COMBINED_CARDINALITY_CONSTRAINT_OP 0 "a fixed upper bound on the sum of cardinalities of uninterpreted sorts"

typerule COMBINED_CARDINALITY_CONSTRAINT_OP ::cvc5::internal::theory::uf::CombinedCardinalityConstraintOpTypeRule
typerule COMBINED_CARDINALITY_CONSTRAINT ::cvc5::internal::theory::uf::CombinedCardinalityConstraintTypeRule


constant FUNCTION_ARRAY_CONST \
  class \
  FunctionArrayConst \
  ::cvc5::internal::FunctionArrayConstHashFunction \
  "expr/function_array_const.h" \
  "the function constant; payload is an instance of the cvc5::internal::FunctionArrayConst class"
typerule FUNCTION_ARRAY_CONST ::cvc5::internal::theory::uf::FunctionArrayConstTypeRule


## conversion kinds
operator BITVECTOR_TO_NAT 1 "bit-vector conversion to (nonnegative) integer; parameter is a bit-vector"

constant INT_TO_BITVECTOR_OP \
  struct \
  IntToBitVector \
  "::cvc5::internal::UnsignedHashFunction< ::cvc5::internal::IntToBitVector >" \
  "util/bitvector.h" \
  "operator for the integer conversion to bit-vector; payload is an instance of the cvc5::internal::IntToBitVector class"
parameterized INT_TO_BITVECTOR INT_TO_BITVECTOR_OP 1 "integer conversion to bit-vector; first parameter is an INT_TO_BITVECTOR_OP, second is an integer term"

## conversion kinds
typerule BITVECTOR_TO_NAT ::cvc5::internal::theory::uf::BitVectorConversionTypeRule
typerule INT_TO_BITVECTOR_OP ::cvc5::internal::theory::uf::IntToBitVectorOpTypeRule
typerule INT_TO_BITVECTOR ::cvc5::internal::theory::uf::BitVectorConversionTypeRule

endtheory
